A memory controller is a digital circuit that manages the flow of data going to and from the processor's main memory. The memory controller can be a separate chip or integrated into another chip such as being placed on the same die or as an integral part of a microprocessor. Memory controllers can include logic to read and write to dynamic random access memory (DRAM), and to “refresh” the DRAM. Without persistent refreshes, the DRAM will lose data written to it as the respective capacitors forming memory elements in the DRAM leak their charge within a fraction of a second. Reading and writing to DRAM can be performed by selecting row and column data addresses of the DRAM as the inputs to a multiplexer circuit, where a demultiplexer on the DRAM uses the converted inputs to select the correct memory location and return stored data.